/**
 * Log 统一封装日志打印
 * 
 * 1. 避免提交忘记删除日志代码，导致生产控制台打印，只有开发环境执行。
 * 2. 日志后面跟随调用文件地址，方便快速定位代码。
 * 3. 自动转换Object对象，解决引用对象值变化问题
*/
const isDev = true // process.env.NODE_ENV === 'development'

function getRunFileUrl(errObj) {
	// 获取err的第二行文字，为实际调用的文件
	let fileTxt = errObj.stack.split('\n')[2]
	// 去除前后空格
	fileTxt = fileTxt.trim()
	// 拿到相对Url
	fileTxt = fileTxt.split('/farm-h5')[1] // /farm-h5 为项目名称
	//  aaa.vue?vue&type=script&:26:5) => aaa.vue:26:5
	const arr =  fileTxt.split('?')
	fileTxt = arr[0] + ( arr[1] ? arr[1].substring(arr[1].indexOf(':')):'')
	// 去掉最后一个括号结束符
	fileTxt = fileTxt.substring(0, fileTxt.length - 1)
	// 组合可以点击跳转的url
	// const url = `Error-点击文件
	// at (uni-app://${fileTxt})`
	const url = `(uni-app://${fileTxt})`
	return url
}

function Log() {
	const error = new Error()
	if (!isDev) {
		return
	}
	// 自动转换Object对象，解决引用对象值变化问题
	const arr = Array.from(arguments).map(item => {
		try {
			// 可以被JSON处理的对象逻辑
			if (['[object Object]', '[object Array]'].includes(Object.prototype.toString.call(item))) {
				return JSON.parse(JSON.stringify(item))
			}
			return item
		} catch(err) {
			return item
		}
	})
	
	console.log(...arr, getRunFileUrl(error))
}
	
Log.err = function() {
	if (!isDev) {
		return
	}
	
	console.error(...arguments)
}

Log.warn = function() {
	if (!isDev) {
		return
	}
	
	console.warning(...arguments)
}

Log.table = function() {
	if (!isDev) {
		return
	}
	
	console.table(...arguments)
}

export default Log